نوشته اصلی توسط
Tishab
به نظر میرسه سرعت و کارایی n\ بهتر باشه چون از بافر استفاده نمیکنه..؟!! ...... حالا استفاده از بافر مزیتی هم داره ؟؟
استفاده کردن از buffer بیشتر به object stream که استفاده می کنید بستگی داره ، مثلا در مثال بالا وقتی از QTextstream استفاده می کنیم ، داده ها ابتدا در بافر نوشته میشه و بعد از flush کردن بافر در stdout نوشته میشه اما در مثال زیر ببنید که با کامپایلر msvc تست کردم :
کد:
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
fstream writer(stdout);
void make_wait(int miliseconds) ;
int main(int argc,char *argv[])
{
writer<<"test1\n";
make_wait(1000);
writer<<"test2\n";
getchar();
return 0;
}
void make_wait(int miliseconds) //Create Delay()
{
clock_t end_wait;
end_wait=clock()+miliseconds;
while (clock()<end_wait)
{
//Do Nothing
}
}
بدون اینکه نیاز به flush کردن باشه ، رشته ی مورد نظر در خروجی نمایش داده میشه ، این نشان میده که fstream از buffer استفاده نمیکنه... (البته این موضوع میتونه در پیاده سازی های دیگه در کامپایلر های دیگه متفاوت باشه )
اما چرا از buffer استفاده میشه :
In most operating systems, a system call to read data from the ultimate producer or write it to the ultimate consumer is an expensive operation. If your applications can reduce the number of system calls they have to make, performance may improve. By acting as a buffer between the ultimate producer or ultimate consumer and the formatting functions, a stream buffer can reduce the number of system calls that are made.
اینجا توضیح داده شده در بیشتر سیستم عامل ها خواندن داده از تولید کننده نهایی و نوشتن در مصرف کننده نهایی عملی پرهزینه است ، و اگر برنامه ها بتونند میزان فراخوانی سیستمی را برای خواندن و نوشتن کاهش بدن ، میتونند کارایی را بالا ببرند. با نقش آفرینی یک بافر بین تولید کننده نهایی یا مصرف کننده نهایی و قالب بندی توابع ، یک بافر میتونه این فراخوانی ها را کمتر کنه.
برای مثال :
بجای نوشتن کد به این شکل :
کد:
writer<<"test1\n";
writer<<"test2\n";
میشه اینطور نوشت :
کد:
writer<<"test1\n"<<"test2\n";
علاقه مندی ها (Bookmarks)